約 4,430,311 件
https://w.atwiki.jp/easybotter_wiki/
EasyBotter 非公式wiki wiki編集のお知らせ 新規作成や大きな変更・編集を行った際は、利用者全員が分かるようこのページ下の「コメントを書く」から告知して下さい。 削除したいページがあればこのページ下の「コメントを書く」で利用者全員が分かるよう告知をお願いします。 関連リンク すべて外部サイトですので、各自責任を持って利用して下さい。 プログラミングができなくても作れるTwitter botの作り方(EasyBotter配布サイト) このwikiは非公式です。 くれぐれもwikiの内容をphaさんに質問する等迷惑の無い様お願い致します。 Twitter Bot BBS phaさん管理のTwitter Bot掲示板です。PHP質問スレッドもあり。EasyBotter以外のTwitter BotでもOK。 Twitter コメント 無事Botの運営に成功しました。まとめていただいた皆さんに感謝を。 -- 名無しさん (2011-06-13 19 48 44) 『"EasyBotterから"のEasyBotterという部分は変えられますか?』のページ。oauth_test.php内の3行目「require_once('twitterOAuth.php');」は全部小文字に直さないとダメだな -- 名無しさん (2012-02-20 01 26 51) 不具合一覧が不具合(リンク切れ?)を起こしている。 -- 名無しさん (2012-03-16 01 46 00) 自分で直しておきました。 -- 名無しさん (2012-03-29 15 10 07) 関連リンクにある、•EasyBotterで緊急時BOT停止する方法 のページが見られないようになってしまっています。是非導入したいので、また閲覧できるようになればうれしいのですが・・・ -- 名無しさん (2012-05-16 01 31 57) ツイートエラーで400件ほど表示されません。 -- 都 (2012-05-26 19 45 32) 緊急時BOT停止する方法 のページを閲覧するには、主の人に閲覧許可を貰う必要があります。 -- 名無しさん (2012-05-26 23 21 57) 2012年 10/11 早朝に、旧APIの稼動が止まったようです。新APIに移行したら再稼動しましたので、その日を境に動かなくなった場合は、APIを最新に変更してみてください。 -- ryuru (2012-10-12 11 03 46) 新APIへの移行方法はこのページに書かれている旧式の方法で大丈夫でしょうか?素人質問ですみません。 -- 舞流 (2012-10-13 03 12 41) botが止まってましたが「最新APIへの変更」ページのreplace.php実行で再稼働しました -- ねお (2012-10-13 18 51 53) 2012/10/14 APIの変更を怠っていたら、3日ほど前から動かなくなってました。API変更はちゃんと行いましょう。 -- ruka (2012-10-14 08 52 12) "page dose not exist"というようなエラーが出ます。APIを修正するとOKです。 -- ruka (2012-10-14 08 53 09) phaです。お世話になっております。APIについて変更したものを配布しようと思います。 -- pha (2012-10-14 18 40 24) 私も、replace.phpを実行したらエラーが消えました。 http //www26.atwiki.jp/easybotter_wiki/pages/34.html -- kabuki (2012-10-15 10 06 41) このwikiではVer2.1版のページを新規に作った方がいいですか?前バージョンとソースがちょっと違いますし…… -- 名無しさん (2012-11-08 18 26 20) Vre.2.1版のページ、作っていただけると非常に助かります。きっと悩んでる人がいっぱいいると思われますので… -- 名無しさん (2012-11-08 21 45 32) 11/9にPHPが5.4に移行しました。これにともない、時間や分を指定する関数date()は、intval()で囲まないと動かなくなったようです。 例:if (intval(date("G")) == 16) {…} -- ryuru (2012-11-10 20 21 32) 同じくVer.2.1版のページお願いします。差し替えただけなのですが動かなくなってしまいました… -- 名無しさん (2012-11-12 22 11 48) 2.1バージョン+さくらcronで動かなくなった方いますか? -- 名無しさん (2012-11-15 20 15 45) 自分も2.1版ページ欲しいです。追加機能が自力ではなんかうまく行かなくて…他力本願で恐縮ですが; -- 名無しさん (2013-01-07 21 35 51) 2.1版の【特定のアカウントに対しては、別のリプライパターンを読み込ませたい】を追加しました。 -- 名無しさん (2013-01-14 21 40 11) 私も2.1バージョン+さくらcronで動きません。手動では問題ないのですが。 -- 名無しさん (2013-01-21 05 33 10) どなたか2.1版「特定のアカウントとのリプライ回数制限」を教えてくれませんか…? 自分で書き換えて試したらうまく動きませんでした>< -- 名無しさん (2013-01-27 15 17 00) 2.1verで停止コマンドが動作しなくなってしまいました。lolipopでcornもサーバもまかなっています。どうしたらいいでしょう……。 -- 名無しさん (2013-03-12 02 02 50) 2.1.2版にバージョンアップしてから、タイムラインへのリプライが動かなくなってしまいました。@リプライとTLリプライのファイルを分けていたのですが、タイムライン用(TLリプライ)だけ動きません。reply_patternのファイル名なら動くのですが、@リプライと混在してスパム化するのは嫌なので、何か改善方法はありませんか? -- 名無し (2013-04-01 04 39 27) 「地震で自動停止させる」ページを作成しました。 -- 名無しさん (2013-04-17 03 52 27) ページ作成ありがとうございます。他サイト様の改造ソースがほぼそのままのように見受けられますが、転載許可はいただいたでしょうか?もしまだでしたら元ネタのお二人に連絡したほうがよろしいかなと……余計なお世話だったらすみません -- 名無しさんへ (2013-04-27 15 59 43) 地震で自動停止ってやつ、PHP5.3のサーバだと使えないんだね…(´・ω・`) 使いたかった… -- 名無しさん (2013-06-16 12 04 17) オートフォロー機能が既にフォローしているアカウントへも延々とフォローしているようなのですがこの動作で大丈夫でしょうか……API消費しているような気がするのですが -- 名無しさん (2013-06-21 00 19 20) ニックネーム機能は2.0版でしかできない、というような記事を読んだことがあるのですが2.1版ではむりなのでしょうか?もしも可能ならヒントだけでもいいので教えて欲しいです。 -- 名無しさん (2013-07-02 23 56 46) 申し訳ないのですが、「自動フォロー返しした時にリプライで知らせたい」の2.1.2版をどなたかお願いいたします… -- 名無しさん (2013-07-04 00 21 43) 最新のAPIに変更が前のAPI記述のままになっているような気がするのですが……。今ってjsonじゃなかったですっけ? -- 名無しさん (2013-07-17 14 29 51) 随分前から改行を入れてつぶやきができるようになりましたが -- 名無しさん (2013-08-04 10 44 39) ↑の続き EasyBotterで改行付きでつぶやかせる方法ってありますか?検索しても「改行コード」ばかりヒットして方法が見つからないです。。 -- 名無しさん (2013-08-04 10 45 53) ニックネーム機能は2.0~のコメンを書き込んだ者ですが2.1版でも可能でしたしやり方を紹介してくださっているサイト様を見つけました。お騒がせしましたm(_ _)m -- 名無しさん (2013-08-07 13 49 56) ↑で -- 名無しさん (2013-08-14 05 25 42) ↑申し訳ないミスりました…。ニックネーム機能を2.1版での導入おめでとうございます。私も探しているのですが見つけることが出来ずにいます。紹介してくださっているサイト様(タイトルかURL)を是非教えていただけませんでしょうか?先方のサイト様がリンク不可のようでしたら、発見時の検索ワードとかでもいいので何かヒントをいただければと思います。よろしくお願いします。 -- 名無しさん (2013-08-14 05 33 44) ↑リンクを貼っていいのかわからなかったので検索ワードを『EasyBotter 2.1 改造』で探した時に出てきました。 -- 名無しさん (2013-08-16 11 06 33) ↑ありがとうございます~!それっぽいサイトを見つけることができました!でも改造例を閲覧したら以前自分でやってみてダメだった方法でした;;こちらの今の環境では残念ながら動きませんでしたが書き換え自体は間違っていなかったことがわかったのでよかったです。別の環境に移せた時にあらためて実装してみようと思います! -- 名無しさん (2013-08-16 22 24 28) 「地震で自動停止させる」、@PAGESのPHP5.3のサーバで停止動作は確認できました。参考にしたサイトがあるのですが、リンク張って良いのかわからなかったので、「EasyBotter 地震で自動停止」で検索してみて下さい。 -- 名無しさん (2013-08-24 19 05 16) ↑み○ば…かな?明日色々試してみる、情報ありがとう!!(2013-06-16 12 04 17の人) -- 名無しさん (2013-08-25 13 13 34) 昨夜からbotが機能しなくなり、手動でうってもCould not authenticate youと表示されてしまいます...認証できないってOAuth認証が上手くいっていないのでしょうか… -- layman (2013-10-09 23 08 14) Oauth認証を自分で取り直したらやはり直りました。easybotter製作者様のアプリが何らかの原因で使えなくなったのかな...とにかくお騒がせしました! -- layman (2013-10-10 11 14 09) 改造で出てくる2.1.2のニックネーム機能は使えなかったです。どなたか他のやり方をご存じの方、いらっしゃいましたらご教示頂けると有り難いです。 -- Lime (2013-10-23 00 39 23) 以前ニックネーム機能の実装に失敗した者ですがこちらの凡ミスでした!{name}変換部分を置き換えるとこをミスっていただけでした^^; -- 名無しさん (2013-10-27 16 41 14) @PAGESは無料でbot置けなくなるようですね。 -- 名無しさん (2013-11-08 09 57 37) ↑メール着てましたね~移転先を探さないと… -- 名無しさん (2013-11-08 15 01 18) ↑「当面の間利用削除は延期します」って来てたね。どうなることやら…… -- 名無しさん (2013-11-23 23 20 11) 14/1/15 twitter社API変更。「 http //api.twitter.com へのアクセスがSSL(HTTPS)のみに 」 easybotter.php内の http //api.twitter.com/ を https //api.twitter.com/ に変更でOK(2箇所) -- ももんが (2014-01-15 12 46 48) ↑ありがとうございました!助かりました -- 名無しさん (2014-01-15 19 50 05) ↑私のとこのも1/15以降Tweetしてくれなかったのが先ほど復活出来ました。情報有り難うございました。 -- najirane_bot (2014-01-16 20 05 42) API変更対策の件、感謝です -- 名無しさん (2014-01-20 10 40 51) 60日以上未更新広告の為にコメ -- 名無しさん (2014-09-09 15 27 04) フォローを増やすため頑張りたいと思います。 -- 名無しさん (2014-09-30 13 12 23) 60日以上未更新広告の為にコメ -- 名無しさん (2014-12-29 14 34 21) 【バージョン】2.1.3 【設置鯖名】XSERVER 【PHPのバージョン】PHP5.3.3 【実行】 手動 【手動】 動く 【不明点など】前から浸かっているTwitterアカウントでは問題なく動いている。今回新しくTwitterアカウントを取りEasyBotterをセットしたところ、Twitterからの情報が取れないようで「(@)をフォローしました Twitterへの投稿に成功しました。 @に投稿したメッセージ: http //twitter.com//status/」とメッセージが出て、実際には送られていない。 -- caffe_siesta (2015-01-27 14 30 35) 【バージョン】2.1.3 【設置鯖名】XSERVER 【PHPのバージョン】PHP5.3.3 【実行】 手動 【手動】 動く 【不明点など】EasyBotter歴5年です。前から使っているTwitterアカウントでは問題なく動いている。今回新しくTwitterアカウントを取りEasyBotterをセット。手動で動かすと「(@)をフォローしました Twitterへの投稿に成功しました。 @に投稿したメッセージ: http //twitter.com//status/」となりアカウント名が入らないし、実際には投稿されていない。現在動いているEasyBotterをそのまま新しいアカウントで設定しても状況は変わらない。Twitter側の問題でしょうか?修正場所を指南いただけるとありがたいです。 -- caffe_siesta (2015-01-27 14 36 06) twitter api の権限がread only だと投稿に失敗するようです -- 名無しさん (2015-03-03 15 02 11) 【バージョン】2.1.3 【設置鯖名】ロリポップ 【PHPのバージョン】PHP5.3 【実行】 手動 【手動】 エラー 【不明点など】ずっと正常稼働していたのですが、いつの間にか function followUser でエラー161に成ってる状態が続いていまして、フォロー返しが出来なく成ってしまいました。公式twitterクライアントでの手動フォロー返しは出来ます。何が問題なのかご指南お願いします? -- 名無しさん (2015-03-25 22 20 08) 私もロリポップでbotを運営しているんですが、何故かフォローだけができない状態なんですよね。それに伴ったリプライはちゃんと返すし、同じスクリプトを使った別サーバーのbotには何も問題がない。謎です。 -- 名無しさん (2015-03-26 23 06 45) ↑ご指南ありがとうございます。別サーバーでは動くんですか!?貴重なご意見です。APIの関係とかtwitter様の仕様変更とかと思っていたら、そうではないと言う事ですね。なるほど。ありがとうございました。 -- 名無しさん (2015-03-26 23 52 01) twitter api の権限修正で動きました!ありがとうございました。感謝感謝! -- caffe_siesta (2015-05-12 17 07 01) @pages今知ったのですがが新規登録の受付停止してますね。 -- 名無しさん (2015-06-21 13 13 38) 7/7からbotが動かないのですが皆さんは異常なしですか?@pages側の問題かな -- 名無しさん (2015-07-09 23 55 08) ↑GAE-Cron使ってるならそちらの問題かと。Twitterで「BOT Cron」で調べると様子が分かると思いますよ -- 名無しさん (2015-07-14 02 32 17) ↑有難うございます。ああっ…他の性能の良い無料cronに心当たりがないので気が滅入ります(シュン -- 名無しさん (2015-07-16 02 10 53) twitter api側の変更があったのか、5分毎にTLのキーワード反応でリプライするbotが毎日書き込み制限にあいます…聞ける人がおらずこちらでの質問になり恐縮ですが、どなたか現在も稼働しているEasyBotterユーザーの方教えていただければ幸いです。 -- 名無しさん (2015-07-27 21 14 28) ↑続き ちなみにツイート内容は「キーワードを含むツイートをした人の、そのツイートの文頭に追記をしてツイートするという内容です。「A キーワード」とつぶやかれた場合、「○○さんがツイート:A キーワード」みたいに呟きなおすものです。 -- 名無しさん (2015-07-27 21 13 45) ↑もひとつ続き Twitter Supportからは具体的な返事が来ずに困っております、現在はアプリは活性化されていますがcronは止めている状態です。再度稼働に持っていきたいので、ひょっとしたらレベルでも構わないのでアドバイスいただければと思います。よろしくお願いします。 -- 名無しさん (2015-07-27 21 18 12) ↑ 症状書いてなかった。先週末突然書き込み停止>自動フォロー機能を1日1回のみに>翌日また書き込み停止という感じです。 -- 名無しさん (2015-07-27 22 51 37) 改行して呟きたいのですが"\n"を入れても改行できないので、改行方法を教えてください。 -- 名無しさん (2015-08-12 23 00 23) 4月末、7月末と2回、稼働中だった複数のbotの内いくつかが突然停止しました。しかし、全て停止したわけでなく、同じEasybotter製で、同じサーバー、同じcronを使用しているbotで停止した/停止していないが起こっているため、原因が特定できない状況です(そのため、停止したbotは停止したままになってしまっています)。原因としては何が考えられるでしょうか?また、それに対する解決案などもあればご教授頂ければ幸いです。 -- 名無しさん (2015-09-29 09 36 16) https //apps.twitter.com/ にアクセスしたところ、自分は凍結かかってました…そんなこともあるかもしれません -- 名無しさん (2015-11-10 23 46 36) 21日あたりからタイムアウトエラー?で停止状態なのですが、同じ症状の方いらっしゃいますか? -- 名無しさん (2016-02-24 06 49 50) 3月からRequest.phpファイルが原因とみられるFatal error require_onceのエラーが出ていてbotが止まっており困っております。原因分かる方いらっしゃいますでしょうか? -- 名無しさん (2016-03-15 01 01 45) ヤマトのコメントが的はずれで会話にならない! 腹が立ちます、 -- マヤ (2017-07-15 23 37 37) @pagesが終了のお知らせのようですね… -- 名無しさん (2018-01-08 05 16 16) @pagesが2/28でサービス終了との事、困りました。無料のいい所ないかしら。クロンは前のGAEが終了した後、三分間隔だったのに、google apps Sprictで5分間隔で叩いておりました。(1分間隔だと止まってしまうので)だんだんと使いづらくなる世知辛い世の中ですね。 -- ななし (2018-02-27 20 58 56) アットページーズ終了してますね… 他にどこかPHPが使える無料のサーバーがあれば教えてください -- 名無しさん (2018-03-02 00 33 01) 自分は結局他で使ってた有料のとこの容量が空いてたのでそっちに移しちゃいましたわ^^ -- 名無しさん (2018-03-23 19 20 28) API変更の影響なのかずっと動かしてたbotが止まってしまいました……みなさんはどう対応されました? -- 名無しさん (2023-08-22 20 43 28) 名前 コメント
https://w.atwiki.jp/easybotter_wiki/pages/39.html
※wikiの編集が分からなくて、追加してほしい項目がある場合はページ下の「コメント」から誰かに頼んで下さい。 このページはBOTを止めるものじゃなく、止まるものに(「簡単じゃない twitter bot」 の作り方メモ)を参考に、 EasyBotter -地震で自動停止を導入しました。-(ハーイ!ともみです!)にて紹介されたものです。 おおまかな手順 地震の震度を取得するPHPを作成する。 震度を取得した日時を記録しておくテキストファイルを作成する。 botが動作中か停止中かフラグを記録するテキストファイルを作成する。 手動で停止状態から復帰させるPHPを作成する。 bot.phpを改造する。 全部をアップロードして動作させる。 おまけ 手動で停止させるPHPを作成する。 地震の震度を取得するPHPを作成する EasyBotterOrg.phpという名前のファイルを作る。 ?php class Easy_botter_org{ function jisin(){ //============================= //地震判定プログラム //============================= /* goo 天気 地震情報RSSを読み込み、震度6以上の場合、震度を返す*/ $earthquake_pubtime_txt = earthquake_pubtime.txt ; //前回のRSS読み込み日時を調べる $last_pubtime = file_get_contents($earthquake_pubtime_txt); if ($last_pubtime == ){ $last_pubtime = date( Y-m-d H i s ,time()-300); } //$last_pubtime = 2011-03-11 14 00 00 ;//TEST $xml = file_get_contents( http //weather.goo.ne.jp/earthquake/index.rdf );//地震情報 - goo 天気 $xml_tree = simplexml_load_string($xml); if (count($xml_tree- channel- item) 0){ $ts = strtotime((string)$xml_tree- channel- item[0]- pubDate); file_put_contents($earthquake_pubtime_txt, date( Y-m-d H i s ,$ts));//読み込み済RSSの日時を保存 chmod($earthquake_pubtime_txt, 0666); } $shindo_num = ; $shindo_str = ; $shindo_pubtime = ; $shindo_text = ; $shindo_basyo = ; $result = array(); foreach($xml_tree- channel- item as $k = $v){ $text = (string)$v- title; $pubtime = date( Y-m-d H i s ,strtotime((string)$v- pubDate)); if ($pubtime = $last_pubtime){ continue; } if ($pubtime date( Y-m-d H i s ,time() - 3600)){//前回から60分(3600秒)以内なら処理しないで次へ continue;//TEST時はここをコメントアウト } //震度を取得し、指定以上ならフラグ立て、処理を終了 preg_match( /震度([0-9]+)[強弱]*/ ,$text,$matches); preg_match( /\[震源地\](.*)\[最大震度\]/ ,$text,$matches_basyo); $shindo = $matches[1]; if (is_numeric($shindo) (int)$shindo = 6){//震度6の場合 $result[ num ] = (int)$matches[1]; $result[ str ] = $matches[0]; $result[ pubtime ] = $pubtime; $result[ text ] = $text; $result[ basyo ] = trim($matches_basyo[1]," "); $result[ word ] = $shindo_str."の地震が".$shindo_basyo."で起きましたので、停止いたします。";//ツィートされます。 break; } } echo $result[ text ]." br / br / "; return $result; } } 震度を取得した日時を記録しておくテキストファイルを作成する。 earthquake_pubtime.txtという名前のテキストファイルを作る。 中身は何も書かなくてOK botが動作中か停止中かフラグを記録するテキストファイルを作成する。 flg_joutai.txtという名前のテキストファイルを作る。 中身は何も書かなくてOK 手動で停止状態から復帰させるPHPを作成する。 start.phpというファイルを作成する。 ?php //============================= //フラグファイル読み出し // 状態フラグ $joutai // [0]stop 動作停止中 //============================= $joutai_txt = file_get_contents("flg_joutai.txt"); if($joutai_txt !== ""){ $joutai = unserialize($joutai_txt); } //============================= //フラグ設定 //============================= $joutai[0] = FALSE; //============================= //フラグファイル格納。 //============================= $response = file_put_contents("flg_joutai.txt" , serialize($joutai)); ? bot.phpを改造する。 bot.php内 ?php //============================= //EasyBotterを呼び出します //============================= require_once("EasyBotter.php"); $eb = new EasyBotter(); //============================= //震度を取得します //============================= require_once("EasyBotterOrg.php"); $ebo = new Easy_botter_org(); //============================= //フラグファイル読み出し // 状態フラグ $joutai // [0]stop 動作停止中 //============================= $joutai_txt = file_get_contents("flg_joutai.txt"); if($joutai_txt !== ""){ $joutai = unserialize($joutai_txt); } //============================= //停止中なら止めてしまう。 //============================= if($joutai[0]){ die("地震で停止しています"); } //この一文は、手動でbot.phpを叩くと表示されます。ツイートはされません。 //============================= //地震判定(毎回) //============================= $shindo = $ebo- jisin(); if( $shindo[ num ] 0){ //値が返ってきてたら $joutai[0] = TRUE; //停止フラグを立てる } //============================= //フラグファイル格納。 //============================= $response = file_put_contents("flg_joutai.txt" , serialize($joutai)); //============================= //ここから下に、通常時のbotの動作を書き込みます。 //============================= ? アップロード ファイルは全て、bot.phpと同じ階層にアップしてください。 きちんと動作すると、flg_joutai.txtを開いた時以下の表示が出ます。 通常時は a 1 {i 0;b 0;} 停止中は a 1 {i 0;b 1;} 停止からまた動かす時は、手動でstart.phpを実行すれば治ります。 おまけ 手動で停止させるPHPを作成する。 ※利用上の注意 pha氏が書いたEasyBotterが勝手に動作させられる可能性とその対策と同じ理屈で、他人にbotを勝手に止められてしまいます。 EasyBotterが勝手に動作させられる可能性とその対策も併せてお読みください。 stop.phpというファイルを作成する。 ?php //============================= //フラグファイル読み出し // 状態フラグ $joutai // [0]stop 動作停止中 //============================= $joutai_txt = file_get_contents("flg_joutai.txt"); if($joutai_txt !== ""){ $joutai = unserialize($joutai_txt); } //============================= //フラグ設定 //============================= $joutai[0] = TRUE; //============================= //フラグファイル格納。 //============================= $response = file_put_contents("flg_joutai.txt" , serialize($joutai)); ? これを、これまでと同じ階層にアップする。 手動でstop.phpを実行すれば停止します。 再度動かす場合は、前述のとおり手動でstart.phpを実行すれば治ります。
https://w.atwiki.jp/easybotter_wiki/pages/18.html
まずはbot.phpに書かれている説明と公式サイトの"基本の設定"解説を熟読しよう。 wikiを見ても分からないところが出てきたら質問スレッドで質問しよう! bot.phpやEasyBotter.phpを編集する上で、基本使いそうなPHP制御構造等はTwitter Bot関連リンクにお勧め解説サイトをリンクしています。 ※wikiの編集が分からなくて、追加してほしい項目がある場合はページ下の「コメントを書く」から誰かに頼んで下さい。 フッターが追加されません(ver.2.04) bot.phpを編集する時に注意!reply_pattern.php内の反応単語に該当しなかった場合、返信させたくないので"data.txt"を外したのですが動きません。 reply_pattern.php内の反応単語に該当しなかった場合、reply_pattern2.phpをチェックさせたいのですが動きません。 超初心者向けFAQdata.txtやlog.datが見あたらないのですが フッターが追加されません(ver.2.04) 現在、フッターが正常に機能していません。 {tweet}等{}を使用した文章時のみ追加される仕様になっています。 不具合一覧にてひとまず解決法を解説していますので、そちらを参考に。 bot.phpを編集する時に注意! 質問スレでよく見かける注意したいことをまとめます。 reply_pattern.php内の反応単語に該当しなかった場合、返信させたくないので"data.txt"を外したのですが動きません。 $response = $eb- reply(2,"reply_pattern.php"); というのを見かけました。 勝手に判断して必要部分を削除しないで下さい cron間隔,"",""と記入することで動作します。 反応単語に該当しなかった時返信させたくない場合は $response = $eb- reply(2,"","reply_pattern.php"); と記入しましょう。 reply_pattern.php内の反応単語に該当しなかった場合、reply_pattern2.phpをチェックさせたいのですが動きません。 $response = $eb- reply(2,"data.txt","reply_pattern2.php","reply_pattern.php"); というのを見かけました。 勝手に判断して記述を増やさないで下さい reply_pattern2.phpをチェックさせるには改造が必要です。 超初心者向けFAQ data.txtやlog.datが見あたらないのですが 下のページを見て拡張子を表示させましょう。 ファイルの拡張子を表示するには?
https://w.atwiki.jp/easybotter_wiki/pages/29.html
※wikiの編集が分からなくて、追加してほしい項目がある場合はページ下の「コメント」から誰かに頼んで下さい。 特定のアカウントと会話(リプライ)させたくない [#o0aaf045]botと名の付くアカウントを制限する [#n9e81b80] 特定のアカウントを制限する [#v1124dd8] 特定のアカウントとのリプライ回数を制限したい [#hcd8233e]備考 [#ldfe0701]毎日ログをリセットしたい [#y24beea8] 特定のアカウントに対しては、別のリプライパターンを読み込ませたい [#g6a99bfa] 特定のアカウントは自動フォローしない [#hd86ba2c] コメント [#ub9d67da] 特定のアカウントと会話(リプライ)させたくない [#o0aaf045] EasyBotter.php内 //必要なつぶやきのみに絞る function selectTweets($response){ $replies = array(); foreach($response as $reply){ //自分自身のつぶやきを除外する $replyName = (string)$reply- user- screen_name; if($this- _screen_name == $replyName){ continue; } //RT, QTを除外する $text = (string)$reply- text; if(strpos($text,"RT") != FALSE || strpos($text,"QT") != FALSE){ continue; } $replies[] = $reply; } return $replies; } を探す。 botと名の付くアカウントを制限する [#n9e81b80] if($this- _screen_name == $replyName){ を //■■botを除外■■ if($this- _screen_name == $replyName || preg_match("@bot@i",$replyName)){ に変更する。 bot(大小文字関係なく)と名の付くアカウントに対してはリプライしなくなります。 特定のアカウントを制限する [#v1124dd8] if($this- _screen_name == $replyName){ を //■■特定の人を除外■■ $bottername = array("abcd","efgh"); if($this- _screen_name == $replyName || in_array($replyName, $bottername)){ とすることで、abcdとefghという名のアカウントに対してリプライしなくなります。 botと入ってないアカウント名のBOTを指定したい場合に使用して下さい。 特定のアカウントとのリプライ回数を制限したい [#hcd8233e] このサンプルはzkb_otさんのソースを参考にしています。 EasyBotter.php内 //リプライを作る (略) $status = ""; //リプライパターンと照合 if(!empty($this- _replyPatternData[$replyPatternFile])){ を探す。 $status = ""; の直前に //■■会話数制限(リプライ返し)■■ $filenameb = "kaiwalog.txt";//kaiwalog.txtに誰からリプライがあったか最新$botk1件記録する //$filenamebは存在するか? if(!file_exists($filenameb)){ touch($twit_logfile) or die( ファイル作成に失敗\n ); chmod($twit_logfile, 0606) or die( 権限変更に失敗\n );//※パーミッションは鯖によって違います } $botdata = file_get_contents($filenameb); $botdata2 = $botdata; $countk = substr_count($botdata2,(string)$reply- user- screen_name); $botdata = explode(",",$botdata); $kazu = count($botdata); $botkey = 1; $botk1 = "10";$botk1--;//記録件数 $botk2 = "2";//回までOK $bottername = array("abcd","efgh");//制限したいアカウント名をいれる if(preg_match("@bot@i",(string)$reply- user- screen_name) || in_array((string)$reply- user- screen_name,$bottername)){ if ($countk =$botk2){ $botkey = "0"; $botdata = implode(",",$botdata); }else{ while ($kazu $botk1){$botdatax = array_pop($botdata);$kazu = count($botdata);} $botdata=implode(",",$botdata); $botdata=(string)$reply- user- screen_name.",".$botdata; } }else{ while ($kazu $botk1){$botdatax = array_pop($botdata);$kazu = count($botdata);} $botdata=implode(",",$botdata); $botdata=(string)$reply- user- screen_name.",".$botdata; } file_put_contents($filenameb,$botdata); if($botkey == "0"){ continue; } を追記し、保存する。 空のkaiwalog.txtを作成し、EasyBotter.phpと共にサーバーへアップロードする。 kaiwalog.txtはログファイル用のパーミッションにする。 ※作成しなくても自動作成するようにしてありますが、自分で作成してうpするのが確実 備考 [#ldfe0701] リプライをくれたアカウント名を最新10件記録します。 そのうち、bot(大小文字関係なく)と名の付くアカウントから3回目のリプライにはリプライ返ししません(2回まではリプライをする。) abcdとefghという名のアカウントに対しても制限します。 ↑botと入ってないアカウント名のBOTを指定したい場合に使用して下さい。 毎日ログをリセットしたい [#y24beea8] bot.php内 $eb = new EasyBotter(); の直後に //■■リプライした人の記録リセット■■ if(date("H-i")=="00-00"){$fp = fopen("kaiwalog.txt", "w");fclose($fp);} を入れてください。 0時0分にアクセスした時、ファイルを真っ白にしてから処理を行います。 特定のアカウントに対しては、別のリプライパターンを読み込ませたい [#g6a99bfa] EasyBotter.php内 function makeReplyTweets($replies, $replyFile, $replyPatternFile){ if(empty($this- _replyPatternData[$replyPatternFile]) !empty($replyPatternFile)){ $this- _replyPatternData[$replyPatternFile] = $this- readPatternFile($replyPatternFile); } (略) foreach($this- _replyPatternData[$replyPatternFile] as $pattern = $res){ 1. if(empty($this- _replyPatternData[$replyPatternFile]) !empty($replyPatternFile)){ の直後に $org_repfile = $replyPatternFile;//デフォルトのファイル名を保管 を追記する。 2. foreach($this- _replyPatternData[$replyPatternFile] as $pattern = $res){ の直前に //■■特定の人には別パターン■■ $userName = (string)$reply- user- screen_name; switch(true){ case stristr($userName, "bot") //botと名のつくアカウント名に対して $replyPatternFile = "bot_pattern.php";//bot_pattern.phpを適用する $this- _replyPatternData[$replyPatternFile] = $this- readPatternFile($replyPatternFile); break; case $userName == "abcd" //abcdというアカウント名に対して case $userName == "efgh" //efghというアカウント名に対して $replyPatternFile = "xxx_pattern.php";//xxx_pattern.phpを適用する $this- _replyPatternData[$replyPatternFile] = $this- readPatternFile($replyPatternFile); break; default //それ以外 $replyPatternFile = $org_repfile;//デフォルトのパターンファイル名 } または //■■特定の人には別パターン■■ $userName = (string)$reply- user- screen_name; if(stristr($userName, "bot")){//botと名のつくアカウント名に対して $replyPatternFile = "bot_pattern.php";//bot_pattern.phpを適用する $this- _replyPatternData[$replyPatternFile] = $this- readPatternFile($replyPatternFile); }else if($userName == "abcd" || $userName == "efgh"){ $replyPatternFile = "xxx_pattern.php";//xxx_pattern.phpを適用する $this- _replyPatternData[$replyPatternFile] = $this- readPatternFile($replyPatternFile); }else{ $replyPatternFile = $org_repfile;//デフォルトのパターンファイル名 } を追記する。 特定のアカウントは自動フォローしない [#hd86ba2c] EasyBotter.php内 foreach($followList as $screen_name){ $response = $this- followUser($screen_name); } を foreach($followList as $screen_name){ //■■xxxはフォロー返ししない■■ if(!preg_match("@bot@i",$screen_name)){ $response = $this- followUser($screen_name); } } と変更する。 例ではbotと名のつくアカウントすべて。 コメント [#ub9d67da] 特定のアカウントへのリプライ回数制限を特定ではなく総てのIDに対して10回中4回以上制限するにはどこの記述を替えるのがいいでしょうか?ワイルドカード?とか思って調べてみたんですがうまく動きませんでした。どなたかわかる方いたら教えてください。 -- 名無しさん (2010-11-17 16 38 42) 「特定のアカウントに対しては、別のリプライパターンを読み込ませたい 」をそのままコピペすると、Warning Invalid argument supplied for foreach() が、環境によって出るみたい。その時、foreach((array)$this- _replyPatternData[$replyPatternFile] as $pattern = $res){ に変更すると、解決します。と報告。 -- ナナシ (2010-12-21 22 02 49) 「特定のアカウントに対して別のリプライパターン」を「時間分けポスト」と併用しているのですが、こちらが返したリプライに対するさらなるリプライに、反応語がないとArreyで返してしまいます。対策はありますでしょうか? -- 名無しさん (2011-01-21 08 09 06) 特定のアカウントのTLに対し、個別にリプライパターンを読ませたい場合、上記の「リプライパターンの個別設定」を利用しようとしてるのですがなぜかうまくいきません。どなたかわかりますでしょうか? -- 名無しさん (2011-02-03 00 14 56) 特定のIDに対してTL反応のみさせず、リプライには通常通り返信できるようにしたいのですが可能でしょうか? -- 名無しさん (2011-06-03 01 31 00) 「特定のアカウントとのリプライ回数を制限したい」で特定のIDは制限したまま、botの回数制限は外したいんですが、何か方法はありますか? -- 名無しさん (2011-06-12 23 08 26) ↑「特定のIDは制限したまま、botの回数制限は外したい~」解決しました。 -- 名無しさん (2011-06-16 17 52 22) 「特定のアカウント」ではなく、「特定の単語」でリプライパターンファイルを分ける方法があれば知りたいのですが -- 名無しさん (2011-12-14 00 13 44) 新verだと上記の記述が変わるので、使えないですよね・・・。 -- 名無しさん (2012-11-03 12 11 25) 一応変更したらうまくいった部分書いておきますね。「$userName = (string)$reply- user- screen_name; 」を「$userName = (string)$reply["user"]["screen_name"]; 」にするだけでちゃんと動きます。ただ、これで正解かは不明です。 -- もの (2012-11-03 14 41 52) 『特定のアカウントに対しては、別のリプライパターンを読み込ませたい』のリプライパターンは1アカウントで複数ファイルを用意できるのでしょうか? -- 未熟者 (2013-01-17 23 27 40) 特定のアカウントとのリプライ回数を制限したい [#hcd8233e]は2.1では機能しないのでしょうか。早急に必要なのですが、どこをどうしたら良いのかわからず…。 -- 名無しさん (2013-01-24 19 04 36) 上に書いた者ですが、会話回数制限も、 先に書かれていた方を参考にして 『(string)$reply- user- screen_name』の部分を全て『(string)$reply["user"]["screen_name"]』に置換したら『kaiwalog.txt』に記録され、2.1でも使えました。お騒がせしました。 -- 名無しさん (2013-01-26 15 21 04) TL反応の場合分けは$userName = (string)$tweet["user"]["screen_name"]でいけるとおもう -- 名無しさん (2013-07-17 17 57 45) 名前 コメント
https://w.atwiki.jp/easybotter_wiki/pages/13.html
はじめに 用意するものPHP(5以上)が使えるレンタルサーバー使用実績のあるサーバー botに使うTwitterのアカウント テキストエディタWindows用テキストエディタ Macintosh用テキストエディタ 文字コード(UTF-8)について FTPソフトWindows用 Mac用 はじめに 何も手を加えずそのままうp→最低限の機能を手動で動かす、この間のエラー対処することから始めましょう。 「プログラミングができなくても~」と言っても、公式にも書かれているように、最低限知っておかねばならない言葉や材料があります。 それらを意味を理解しないままスキップして設置解説サイト通りにやっても動かない・分からないといわれても誰も助けてくれません。 あなたがまず理解しないことにはスタートラインに立てないのです。 面倒くさがらず調べて、言われている意味が分かるようになってからプログラムに触れましょう。それからでも遅くはありません。 いきなり設置して、cronでアクセスさせて正常に機能しなかったら、基本的なPHPエラーの原因は分かりません 用意するもの おすすめのものをピックアップしています。 使い方は各自、自己責任で学んでください。 PHP(5以上)が使えるレンタルサーバー 使用実績のあるサーバー 注:実績があるからといっても、最低限サーバー仕様やオンラインマニュアル、よくある質問等にも目を通しておきましょう。 あまりに無知・無茶すぎるとレンタル元から『twitterのbot設置は禁止します』となるかもしれません。 すでにPHP5が使えるサーバーで禁止しているところもあります 有料サーバーJust-Size.Networks XREA plus さくらインターネット (スタンダード以上) LaCoocan(スタンダード以上) ロリポップ 無料サーバーXREA @pages fizby.net TOK2 ちなみに、初心者質問スレなどから見ると@pagesが人気のようです。 land.toはEasyBotterは動作不可。TOK2はSSLが使えないので本体改造が必要。FileQはver.2なら設置可能。 ver1.42でのOAuth認証はland.toと共に出来ない(curlエラー) botに使うTwitterのアカウント Twitter.comからアカウントを登録する。もちろんBOT専用のものを取得する。 ※10個以上の類似したアカウントを取得すると削除される、という情報があります。複数のアカウントを持っている場合は注意して下さい。 テキストエディタ phpに対応していて、コマンドや要素の自動色分けに対応したものを選びたい。 また、Easybotterのファイル群は全て 「文字コード:UTF-8、改行コード LF」 であるので、これを確認・指定できるものだとなお良い。 Windows用テキストエディタ Peggy Pad(Peggy Pad配布元) ※シェアウェアもあるので注意 NoEditor/UnEditor(NoEditor/UnEditor配布元) ※シェアウェアもあるので注意 EmEditor Free(EmEditor Free配布元) ※シェアウェアもあるので注意ツール→すべての設定プロパティで、基本→行番号を表示、記号→全角空白表示にチェックを入れておくと編集に便利 TeraPad(TeraPad配布元)ファイルを保存するときは、文字コード:UTF-8N、改行コード LFで K2Editor(K2Editor配布元) PHPエディタ(PHPエディタ配布元)standalone版おすすめ。PHP(easyPHP等でもok)も同時にDL・インストールしてphp.exeの場所を入力してやると構文チェック機能を使えるようになる。 ソースの先頭数行に全角文字がない場合は、読み込み時に日本語が文字化けしてしまうことがあります。そういう場合は「ファイル」-「再読込」でUTF-8を指定してください。 Macintosh用テキストエディタ CotEditor(CotEditor配布元) mi(mi配布元/mi 用の PHP モード) 文字コード(UTF-8)について 正式にはUTF-8でバイトオーダー(BOM)無しです。ソフトによってはこれを「UTF-8N」や「UTF-8(no signature)」などと表記していますが、わざわざBOM有りにする必要は有りません。 FTPソフト DLしたEasyBotterをサーバーへアップロードする為に必要です。 @PAGESなどのサーバーにはファイルマネージャーという機能があります。 これを使う場合には、FTPソフトは必要ありません。 Windows用 FFFTP(配布元) FileZilla(配布元) Mac用 FireFTP(配布元) ※Firefoxアドオン FileZilla(配布元)
https://w.atwiki.jp/easybotter_wiki/pages/26.html
※wikiの編集が分からなくて、追加してほしい項目がある場合はページ下の「コメント」から誰かに頼んで下さい。 改造方法を紹介するスレにあった「単語拾い」をver.2.0で使いたい [#c1629660]備考 [#e06b9c91] 自動フォロー返しした時にリプライで知らせたい [#ycc2942f] 鍵付きの人へ何度も話しかけてしまう場合 [#q1c3b296] 正規表現を使った言葉返しで、言葉遊びをさせる(文字列の並びを変える。) [#x3c977be]備考 [#ucd102de] 自動フォローではなく特定のリプライを貰った時のみ対象にフォロー要請&リプライする(新API対応版) [#v3f312b5]備考:フォロー告知をDMにしたい場合(リムーブは出来ません。) [#b0266ba0] 特定のリプライ反応をリプライではなくTL発言にする [#wb35bfa8] 一度のリプライでリプライ回数の制限する コメント [#fd6efe73] 改造方法を紹介するスレにあった「単語拾い」をver.2.0で使いたい [#c1629660] EasyBotter.php内 if(strpos($text,"{tweet}") !== FALSE !empty($reply)){ $tweet = preg_replace("@\.?\@[a-zA-Z0-9-_]+\s@u","",$reply- text); $text = str_replace("{tweet}",$tweet,$text); } //フッターを追加 $text .= $this- _footer; の直前に、以下を追記する。 //■■ここから名詞拾い■■ if(strpos($text,"{ran_meishi}") !== FALSE !empty($reply)){ //アプリケーションID $apiKey = "***********************"; $apitweet = preg_replace("@\.?\@[a-zA-Z0-9-_]+\s@u","",$reply- text); $apiurl = "http //jlp.yahooapis.jp/MAService/V1/parse?appid=".$apiKey." filter=9 sentence=".$apitweet; $apirss = file_get_contents($apiurl); $apixml = simplexml_load_string($apirss); //配列「meishi」を作る $meishi = array(); // 特定の単語、指定字数以下の名詞を弾きながら配列に名詞を追加 foreach($apixml- ma_result- word_list- word as $apiitem) { //拾いたくない単語 if ((ereg("ダタラ|モスマン|モコイ", $apiitem- surface)==False) (mb_strlen($apiitem- surface) 3*2)){ $meishi[]=$apiitem- surface; } } //リプライの中に名詞がない場合の単語をセット(複数設定可) if ($meishi[0] == ""){$meishi = array(" #60;censored ","×××","■■■");} //名詞をランダムに選ぶ $ran_meishi = $meishi[array_rand($meishi)]; //名詞を変換する $text = ereg_replace("{ran_meishi}", "$ran_meishi", $text); } 備考 [#e06b9c91] ぼっと倉庫がソースです。 使い方はこちらのサイトの解説をよく見ること。 自動フォロー返しした時にリプライで知らせたい [#ycc2942f] EasyBotter.php内 //自動フォロー返し function autoFollow(){ $response = $this- getFollowers(); $followList = array(); foreach($response as $user){ $follow = (string)$user- following; if($follow == "false"){ $followList[] = (string)$user- screen_name; } } foreach($followList as $screen_name){ $response = $this- followUser($screen_name); } } とある部分を探す。 foreach($followList as $screen_name){ $response = $this- followUser($screen_name); } の直後に //■■フォローした時にリプライを送る■■ foreach($followList as $rscreen_name){ $value = array("status"= "@{$rscreen_name} フォロー完了しました!"); $response = $this- setUpdate($value); $result = $this- showResult($response); $results[] = $result; } を入れる。 「フォロー完了しました!」は自由に変更してもOK。 鍵付きの人へ何度も話しかけてしまう場合 [#q1c3b296] BBSより転載です。 EasyBotter.php内 //自動フォロー返し function autoFollow(){ (略) if($follow == "false"){ を //自動フォロー返し function autoFollow(){ (略) if($follow == "false" $user- protected == "false"){ と変更する。 鍵付きの人へフォロー返しを行いません。 正規表現を使った言葉返しで、言葉遊びをさせる(文字列の並びを変える。) [#x3c977be] EasyBotter.php内 //リプライを作る (略) //リプライパターンと照合 (略) for($i=1;$i count($matches);$i++){ $p = "$".$i; $status = str_replace($p,$matches[$i],$status); } を探す。 $status = str_replace($p,$matches[$i],$status); を //■■言葉遊びする■■ if(preg_match("/言葉遊び/u",$status)){ $kotoba_asobi = $this- mb_str_shuffle($matches[$i],"UTF-8"); }else{ $kotoba_asobi = $matches[$i]; } $status = str_replace($p,$kotoba_asobi,$status); に変更する。 EasyBotter.php内ラスト } ? の直前に function mb_str_shuffle($str,$enc){ $buff = array(); while ($len = mb_strlen($str,$enc)) { $buff[] = mb_substr($str,0,1,$enc); $str = mb_substr($str,1,$len,$enc); } shuffle($buff); return implode( ,$buff); } を追記する。 備考 [#ucd102de] mb_str_shuffle()はどう書く?org betaソースです。 「言葉遊び」部分はリプライパターンに応じて変更して下さい。 この一例はリプライパターンで「『$1』…言葉遊びしてみたよ~♪」とリプライさせる時の例になります。 「『$1』…言葉遊びしてみたよ~♪」とリプライする時のみ、$1を言葉遊びさせます。 言葉遊び:$1が「あいうえお」だとすると、「あおういえ」「うえあおい」等とランダムに文字列を入れ替えます。 自動フォローではなく特定のリプライを貰った時のみ対象にフォロー要請&リプライする(新API対応版) [#v3f312b5] 「フォローして」「リムーブして」とリプライをした時にBOTに対象への処理を行う。 ※実際は「フォローして」「リムーブして」等の簡単な言葉ではないものを推薦。「フォローして。○○○(BOTの名前)」等。 reply_pattern.php $data = array();内に //半自動フォロー、リムーブ "フォローして"= array( "[[AUTOFOLLOW]]フォローしました", "[[AUTOFOLLOW]]フォローしたよ", ), "リムーブして"= array( "[[AUTOREMOVE]]リムーブしました", "[[AUTOREMOVE]]リムーブしたよ", ), を追記。 EasyBotter.php内 //リプライを作る (略) //リプライパターンと照合 (略) $re["status"] = "@".$reply_name." ".$status; を探す。 $re["status"] = "@".$reply_name." ".$status; を switch(true){ //半自動フォロー case stristr($status, "[[AUTOFOLLOW]]") $status = str_replace("[[AUTOFOLLOW]]","",$status); $followreq = $this- consumer- sendRequest("http //api.twitter.com/1/friendships/create.json",array("screen_name" = $reply["user"]["screen_name"]),"POST"); $re["status"] = "@".$reply["user"]["screen_name"]." ".$status; break; //半自動リムーブ case stristr($status, "[[AUTOREMOVE]]") $status = str_replace("[[AUTOREMOVE]]","",$status); $removereq = $this- consumer- sendRequest("http //api.twitter.com/1/friendships/destroy.json",array("screen_name" = $reply["user"]["screen_name"]),"POST"); $re["status"] = "@".$reply["user"]["screen_name"]." ".$status; break; //その他 default $re["status"] = "@".$reply["user"]["screen_name"]." ".$status; } に書き換える。 備考:フォロー告知をDMにしたい場合(リムーブは出来ません。) [#b0266ba0] switch(true){ case stristr($status, "AUTOFOLLOW") $statusxxx = str_replace("AUTOFOLLOW","",$status); $followreq = $this- consumer- sendRequest("http //api.twitter.com/1/friendships/create.json",array("screen_name" = $reply["user"]["screen_name"]),"POST"); $followreq = $this- consumer- sendRequest("https //api.twitter.com/1/direct_messages/new.json",array("screen_name" = $reply["user"]["screen_name"],"text" = "$statusxxx"),"POST"); $re["status"] = ""; break; (略) } if(stristr($status, "AUTOFOLLOW")){continue;} 特定のリプライ反応をリプライではなくTL発言にする [#wb35bfa8] EasyBotter.php内 //リプライを作る (略) //リプライパターンと照合 (略) $re["status"] = "@".$reply_name." ".$status; を探す。 $re["status"] = "@".$reply_name." ".$status; を switch(true){ //TL発言 case stristr($status, "[[TLH]]") $status = str_replace("[[TLH]]","",$status); $re["status"] = $status; $rpid = (string)$reply- id; file_put_contents($this- _logDataFile,$rpid); break; //その他 default $re["status"] = "@".$reply_name." ".$status; } に書き換える。 reply_pattern.php $data = array();内 ""= array( "[[TLH]]あれ…誰か呼んだ?", "その言葉はわからないです", ), と記入。 ランダムで 「[[TLH]]あれ…誰か呼んだ?」 が選ばれた時、リプライではなくTL上に「あれ…誰か呼んだ?」と発言する。 一度のリプライでリプライ回数の制限する EasyBotter.php内 //古い順にする $replies = array_reverse($replies_); if(count($replies) != 0){ //リプライの文章をつくる $replyTweets = $this- makeReplyTweets($replies, $replyFile, $replyPatternFile); の下に //リプライ回数の制限 ここから $reply_max = 3;//1回のreply実行でリプライできる最大数 if(count($replyTweets) $reply_max){//$replyTweetsが$reply_maxよりおおきかったら //$replyTweetsが$reply_max件になるまで配列から要素を削除 while(count($replyTweets) $reply_max){ array_splice($replyTweets,array_rand($replyTweets),1);//ランダムで1件削除 } } //リプライ回数の制限 ここまで を追加する コメント [#fd6efe73] "特定のリプライ反応をリプライではなくTL発言にする "についてなんですが、TLHとはなんでしょうか? -- みゅ子 (2010-09-16 01 23 26) TL発言=TLH これに限らず分からないのならまずは検索して調べましょ -- zero (2010-09-16 21 05 38) zeroさんありがとうございます。"TLH twitter"で検索したのですがいまいちよく分からず;次からはもっと検索してみます。すみませんでした。 それと「特定のリプライ反応をされる単語」は何処で設定できるのでしょうか?><; -- みゅ子 (2010-09-17 22 17 33) TL上の特定の単語に反応してTL発言をする、というのは可能ですか? -- フィル (2010-10-26 19 32 23) TLに反応してTL発言をするのはリプライ反応をTL発言にするの応用でできます。 -- ナナシスター (2010-11-03 18 05 32) リプライに関してreply_patternにない場合にはdata.txtからランダム発言ではなく、何も返さないようにするにはどうすればよいのでしょう -- 774 (2010-11-23 23 36 19) 「フォローした時にリプライを送る」で{name}を使いたいのですがうまくできません。どなたかご教授いただけませんでしょうか。自分でも調べてみたのですがわかりません。 -- りん (2010-12-20 16 41 08) フォロー要請&リプライする をするとどうもエラーになるのですが・・・原因分かる方いますか? -- なな (2011-04-12 23 51 31) ↑まだ分からないならBBSのTwitterBotPHP質問スレの方へ -- 通りすがり (2011-04-19 00 37 45) TLHとリプライサンプルの「([^\s、。]+?)は好き?"」「"$1おいしいです"」は併用できませんか?(動きませんでした) -- なし (2011-06-18 19 01 07) 「単語拾い」で、拾った発言を返す文章はdata.txtに書くのでしょうか? -- 774 (2011-07-07 00 35 47) ↑reply.txt -- 名無しさん (2011-07-07 20 24 33) ↑「reply_pattern.php」ではありませんか? -- (2011-07-08 01 02 17) 自動フォロー返しした時にリプライで知らせたいをDMで知らせることはできるのでしょうか。 -- 名無しさん (2011-09-06 17 27 09) 非公式RTに反応させることはできないでしょうか? -- 名無しさん (2011-09-10 01 30 13) 過去ログ内で紹介されてましたけど、EasyBotter.phpの中でRTを検索するとそれらしきところが出てきます。あとは御自分でドウゾ -- 名無しさん (2011-09-13 20 22 51) 名詞拾いで、TLの名詞を拾って、その言葉を盛り込んでTLでつぶやくというのは出来ますか? 出来るのならどこをどう改編したら良いでしょうか。 -- 名無しさん (2012-05-24 22 02 30) リプライをもらったツイートに対してfavをする機能はどのように実装しますか -- 名無しさん (2012-07-02 20 27 11) 特定の言葉がTL上にあるとき、favをする機能の実装はどうすればできますか -- 名無しさん (2012-07-02 20 30 28) Ver2.5を新APIにしたら半自動フォロー&リムーブが出来なくなりました…コピペしただけなので、こうなった理由が分からず困ってます; -- 名無しさん (2012-10-19 23 35 08) ↑Twitterがまた仕様変更したようですね。easybotterの作者さんが修正版を近々出すそうなので待ちましょう。 -- 名無しさん (2012-10-20 15 07 20) 新APIにしてから、viaが自分の設定したのとAPIで2重反応されます。私だけでしょうか? -- 名無しさん (2012-11-15 16 01 40) バージョン2.1.1でも『特定のリプライ反応をリプライではなくTL発言にする』機能を使いたいのですが、どうすれば使えますか? -- 七種 (2012-12-29 23 36 47) 2.1.2だと上記の半自動フォローが使えないと思うのですがどう修正すればいいのでしょう…リプを返す所までは修正出来ましたがフォローを返せません… -- 名無しさん (2013-01-31 12 13 29) http //badosyan3.blog84.fc2.com/blog-date-201301.html -- 名無しさん (2013-02-01 21 11 41) ↑途中送信失礼しました。「自動フォローではなく特定のリプライを貰った時のみ対象にフォロー要請&リプライする(新API対応版) [#v3f312b5]」の部分は↑のサイトの方が参考になるかも…? -- 名無しさん (2013-02-01 21 12 29) ↑ありがとうございます、無事フォロー出来ました! -- 名無しさん (2013-02-02 02 53 34) 2.1.2で単語拾いを使うにはどうすればいいのでしょうか。エラーが出て使えません…。 -- 名無しさん (2013-02-20 03 29 33) 自動フォロー返しした時にリプライで知らせたい、の通りにやるとバージョン2.1.2では動きません。どなたか分かる方いらっしゃいませんか? -- 名無しさん (2013-02-21 13 32 05) 自動フォローではなく特定のリプライを貰った時のみ対象にフォロー要請&リプライする(新API対応版)↑の参考URLが見れません。どなたか方法わかる方いらっしゃいますでしょうか。 -- 名無しさん (2013-06-13 15 44 15) ↑自動フォローではなく特定のリプライを貰った時のみ対象にフォロー要請&リプライする(新API対応版)の参考URLが見れないのですがどなたか参考になるページを教えていただけないでしょうか。 -- 名無しさん (2013-06-13 15 45 08) 名詞拾いの件ですがリプライの単語を拾うのではなくTL上の単語を拾わせるにはどこをどう変えればいいですか? -- 名無しさん (2013-06-21 01 19 04) 自動フォローではなく特定のリプライを貰った時のみ対象にフォロー要請&リプライする(新API対応版) [#v3f312b5]と、備考:フォロー告知をDMにしたい場合(リムーブは出来ません。) [#b0266ba0]の部分について直してみました。あっているという保証はできませんが試してみてください -- 名無しさん (2013-08-02 16 07 13) 「自動フォローではなく特定のリプライを貰った時のみ対象にフォロー要請&リプライする(新API対応版) [#v3f312b5]」ですが「http //api.twitter.com/1/friendships/create.json」では動かないようです。「http //api.twitter.com/1.1/friendships/create.json」に修正したら動きました。 -- 名無しさん (2013-08-18 10 22 38) 上のコメントの方へ。ここはEBの古いバージョンの記述なので、新APIはvなしのものからv1になったときの新APIのことだと思いますよ。APIv1.1のはver.2.1版に書いたほうがよかったかもしれません。 -- 名無しさん (2013-08-18 23 58 15) いつの間にか function followUser($id) でエラー161に成ってる状態が続いていまして、フォロー返しが出来なく成ってしまいました。手動では出来ます。何が問題なのか分かりませんでしょうか? -- 名無しさん (2015-03-22 19 56 28) 名前 コメント
https://w.atwiki.jp/easybotter_wiki/pages/27.html
※wikiの編集が分からなくて、追加してほしい項目がある場合はページ下の「コメント」から誰かに頼んで下さい。 TL反応でも会話終了( [ [ END ] ] )を機能させたい。 [#d3c85f4b] コメント [#g7968718] TL反応でも会話終了( [ [ END ] ] )を機能させたい。 [#d3c85f4b] EasyBotter.php内 //タイムラインへの反応を作る function makeReplyTimelineTweets($timeline, $replyPatternFile){ (略) $replyTweets[] = $re; } return $replyTweets; } とある部分の $replyTweets[] = $re; を if(!stristr($status,"[[END]]")){$replyTweets[] = $re;} と変更する。 コメント [#g7968718] 名前 コメント
https://w.atwiki.jp/easybotter_wiki/pages/33.html
このページへ誘導されてきた方へ このページに「回答」はありません、脱初心者を目指す意欲的な方のお勉強の取っ掛かりをサポートするページです。 このページを読解していただくことでbot.php編集における基本・応用がこなせるようになります。 ソースのコピペは思わぬ誤作動の元となりやすく、またコピペで済ませることで誤作動の原因に気付きにくくなる欠点があります。 bot.phpを構成しているPHPのパーツを理解することで、bot.phpの全体を正しく把握し制御できるようになります。 ここでは「プログラミングができなくても~」というEasyBotterの基本にもとづき、あえてプログラミングの説明らしからぬ方法で説明している部分もあります。 プログラミング初心者にプログラミングの基礎を学んでもらうモノなので、プログラミング慣れした方には違和感あるかと思いますがご容赦ください。 またEasyBotterに関連するものに特化して説明していますので、PHP自体に興味をもたれた方は本家のマニュアルなどを参照されると良いでしょう。 EasyBotterは基本性能が備わっているので、基礎を勉強することで比較的容易に改造に着手することができます。 botをの機能を発展させたいと思う方は是非、基礎を勉強してみてください。 時間分けとは? 制御構造「if」ifの基本形 ifの拡張機能 if文の複雑化 if文の要素一覧 関数とは?date関数 演算子とは?代数演算子とは?代数演算子 比較演算子とは?比較演算子 論理演算子とは?論理演算子 代入演算子とは?代入演算子 演算子の優先順位 変数とは?変数の設定 最後に コメント 時間分けとは? botの動作を複雑化させる為に必要な時間分けですが、何から調べればよいのかわからない、という方も多いのではないでしょうか。 ここでは時間分けで使う内容を分解しそれぞれを理解することで、時間分けをマスターします。 時間分けを理解している方は以下の内容を正しく理解できるでしょう。 if(date("G") == 7 date("i") == 30){ $response = $eb- postRandom("0730.txt"); } 正解は「7時かつ30分の場合、0730.txtからランダムポストを行い、7時かつ30分の場合の処理を終える」です。 簡単に書けば「7時30分に0730.txtからランダムポスト」で済みますが、上記のように書いたのには理由があります。 bot.phpにおいては、関数や演算子などを条件文に入れ込むことで構成されていきます。 「関数」「演算子」「条件文」というと難しいイメージを持つかもしれませんが、パターンは多くありません。 まずは時間分けの基本形を知ることで、複雑な動作を分解してみましょう。 制御構造「if」 ここではifを使った条件分岐を説明しますが、初めに「プログラムは書かれた順に実行される」ということを覚えていてください。 これはこの項目に限らず全てのプログラムに通じるものです。 つまり条件をいくつも提示した場合、先に書かれた条件が優先されるのです。 ifの基本形 まずはif文の基本形を見てみましょう。 if(条件){処理;} たったこれだけです。 if文は英語の「もし~ならば」という意味と同じで、この場合は「もし条件に当てはまるなら処理をする」というものです。 if(条件1){処理1;} if(条件2){処理2;} if(条件3){処理3;} このように何行も並列していけばこの基本形だけで時間分けは可能ですが、スマートな書き方とは言い難いものです。 ifの拡張機能 それではif文の拡張機能「else if」「else」を使ってみましょう。 if(条件1){ 処理1; } else if(条件2){ 処理2; } else{ 処理3; } elseは英語の「その他」という意味と同じとなります。 else ifは「他にもし~ならば」、elseは「その他の場合は」、となります。 ここで問題です、【条件1】にも【条件2】にも当てはまる場合、処理はどのようになるのでしょうか? ここで「プログラムは書かれた順に実行される」を思い出しましょう。 書かれた順、つまり最初の【条件1】に対応する【処理1】が行われることはわかりますね? では【条件2】にも当てはまっているので【処理2】も行われるのでしょうか……答えはNO。 「else」という英単語には「その他」という意味があることは先に説明しましたが、これには「既にあるものは除いて」という意味が含まれています。 つまり、【条件1】に当てはまるものは【処理1】が終わった時点で終了、【条件1】に当てはまらなかったものだけが【条件2】の判定へ進むことができるのです。 また【条件1】にも【条件2】にも当てはまらない、つまり「その他の場合」は【処理3】が実行されます。 if文の複雑化 if文は一つの条件で二つ以上の処理をすることもできます。 if(条件1){ 処理1a; 処理1b; } else if(条件2){ 処理2a; 処理2b; } else{ 処理a; 処理b; } また、「if」「else if」「else」の処理にさらなるif文を入れ込むこともできます。 if(条件1){ if(条件a){ 処理1a; } else if(条件b){ 処理1b; } else{ 処理1; } } else if(条件2){ if(条件a){ 処理2a; } else{ 処理2; } } else{ if(条件a){ 処理a-1; 処理a-2; 処理a-3; } } if文は上記のような2段階に限らず、3段階4段階と増やすことができます。 if文の要素一覧 if もし【条件】に当てはまるなら【処理】を実行、「}」以降に条件を持ちこさない 条件分岐させる場合、必ず最初に書くもの。(ただし並列して実行する条件分岐は別) else if 他にもし【条件】に当てはまるなら【処理】を実行、「}」以降に条件を持ちこさない 「if」または「else if」の後につけることができる。なくても良い。 else その他の場合は【処理】を実行、「}」で同列冒頭にあるif文を終了する 「if」「else if」の条件のどれにも当てはまらない場合の処理。なくても良い。 () 【条件】内容を丸括弧で囲む 「if」「else if」で使えるが、「else」では使えない。条件は演算子を使うことで複雑化・詳細化できる。 {} 【処理】内容を波括弧で囲む 「if」「else if」「else」のいずれでも必要。複数行可、複数の処理を書いても良い。 ; 【処理】内容の最後に必要なセミコロン これを忘れるとエラーになる、消し過ぎに注意。 関数とは? 「関数」とは一定の処理を行いその結果や値を反映させるものです。 EasyBotterでは特にbot.phpで時間わけをする時に使う「date関数」がなじみ深く、また重要な関数となります。 ここではEasyBotterで使うdate関数について説明します。 date関数 bot.phpでの使用頻度が高い物、bot.phpの動作が工夫できるものを紹介しています。 詳細はPHPマニュアルをご覧ください。 単位 date("?") 値 特徴 利用法 年 Y 2011など 4桁の西暦 y 11など 下2桁の西暦 L 0~1 0=平年、1=うるう年 2月やdate("z")を使う時に有用 月 n 1~12 1桁の月には0をつけない bot.phpで使う機会が多い、覚えてしまおう m 01~12 1桁の月に0をつける t 28~31 その月が何日まであるか date("t")とdate("j")の値が同じ時は月末日、など 日 j 1~31 1桁の日には0をつけない bot.phpで使う機会が多い、覚えてしまおう d 01~31 1桁の日に0をつける z 0~365 その年の何日目か(1月1日が0) 34(立春)以降は春、124/125(5月5日/立夏)以降は夏~など工夫できる 時 G 0~23 24時制、1桁には0をつけない bot.phpで頻出、覚えてしまおう H 00~24 24時制、1桁に0をつける g 0~12 12時制、1桁には0をつけない h 00~12 12時制、1桁に0をつける A AM、PM 午前午後、大文字 12時制の時に有用 a am、pm 午前午後、小文字 分 i 00~59 1桁には0をつける bot.phpで頻出、覚えてしまおう 秒 s 00~59 1桁には0をつける CRONとの誤差が生じやすい為あまり使う事は無い 曜日 w 0~6 0=日曜、1=月曜…6=土曜 数値なので1~5は平日、その他は週末、という分け方も D Mon~Sun 英語の略表記 "w"の意味がわからない方に…スペルミスに注意 演算子とは? 代数演算子とは? 加減乗除など、主に数値の計算をするものです。(文字列などによる例外もあります) bot.phpでは「%」を使う機会が多いのですが、その意味を間違えている方も少なくありません。 いずれも小学校で習う算数レベルなので、意味を理解すれば難しいものではありません。 代数演算子 bot.phpでの使用頻度が高い物を紹介しています。 詳細はPHPマニュアルをご覧ください。 + A + B 加算 AにBを足した値 「3 + 7」の値は「10」 - A - B 減算 AからBを引いた値 「19 - 9」の値は「10」 * A * B 乗算 AにBを掛けた値 「2 * 5」の値は「10」 / A / B 除算 AをBで割った値 「10 / 4」の値は「2.5」 % A % B 剰余 AをBで割った時の余り 「10 % 7」の値は「3」 比較演算子とは? 名前の通り、演算子の左右にあるものを比較します。 bot.phpの編集において欠かせないものですので、是非覚えましょう。 また、使い方次第で複雑な設定をすることができます。 比較演算子 bot.phpでの使用頻度が高い物を紹介しています。 詳細はPHPマニュアルをご覧ください。 A == B AとBが等しい A === B AとBが同型かつ等しい A != B AとBが等しくない A B A !== B AとBが同型でないか等しくない A B AがBより少ない A B AがBより多い A = B AがB以下 A = B AがB以上 これも小学生で習うことですが、「より少ない」「より多い」はその数値を含まない、「以下」「以上」はその数値を含む、という算数の基本を間違えないよう注意。 論理演算子とは? 論理演算をおこなう為の演算子です……「論理演算」と聞くと耳慣れませんが、「ベン図」と聞くとピンと来る方もいるかと思います。 (ベン図についてはWikipediaの論理演算とペン図に詳しいのでこの場では説明を省略します。) 条件の組み合わせを一つの式の中に収める為に使われるもので、AND・OR・NOTという基本で成り立ちます。 論理演算子 bot.phpでの使用頻度が高い物を紹介しています。 詳細はPHPマニュアルをご覧ください。 A B AかつBの場合【優先度:高】 A || B AまたはBの場合【優先度:高】「||」はwiki仕様の都合上全角になっています、半角に直して下さい A and B AかつBの場合【優先度:低】 A or B AまたはBの場合【優先度:低】 A xor B AとBのうちどちらかにだけ当てはまる場合 !A Aに当てはまらない場合 「A B C」「A || B || C」「A B or C D」のように、複数の論理演算子を使うこともできます。 ちなみに「A B or C D」は優先順位の関係で「AかつB、または、CかつDの場合」となります。 代入演算子とは? 文字通り「代入」する為の演算子で、代入するものは数値に限らず文字列も代入することが可能です。 代入演算子の左辺にくるものは「$a」のような変数であることが殆どです。 この代入演算子はbot.php編集において必須の要素ではありません、脱初心者してから考える事で説明していますが、EasyBotterにおいては完全に脱初心者してからとりかかる分野となります。 代入演算子 bot.phpでの使用頻度が高い物を紹介しています。 A = B AにBを代入する 結果的にA=B A += B AにBを加算したものを、Aに代入する 結果的にA+B A .= B AにBを続けて、Aに代入する 結果的にAB A ++ Aに1を加算したものを、Aに代入する 結果的にA+1 A -- Aから1減算したものを、Aに代入する 結果的にA-1 演算子の優先順位 全ての演算子には優先順位が設定されており、複雑な動作を構築する上で留意しておかなければなりません。 特に論理演算子は当該項目でも説明していますが、動作に大きく影響するものなので優先順位を把握し適切に使用しましょう。 詳細はPHPマニュアルをご覧ください。 変数とは? 変数はプログラムにおける一時的なデータの事で、特定の文字列や数値に名前をつけることができます。 この変数はbot.php編集において必須の要素ではありません、脱初心者してから考える事で説明していますが、EasyBotterにおいては完全に脱初心者してからとりかかる分野となります。 変数の設定 変数名は「半角英数(a~z、A~Z、0~9)」及び「アンダーバー(_)」ならば下記の事項以外で特に制限はありません。 変数名は必ず「$」から始めなければなりません 「$」の直後に半角数字を置く事はできません 「$」の直後は半角アルファベットまたはアンダーバーでなければなりません 大文字と小文字は別の文字として扱われます 「$12345」という変数名は数字から始まっているのでダメですが、「$abc123」や「$_1234」はOKです。 また「$ABCD」「$Abcd」「$abcd」は大文字・小文字の差異がある為、全て別の変数として扱われます。 基本的に変数名に使用する文字数に制限はありません、「$a」のような1文字でも良いですし「$today_year_month_day_week」のような長いものでも大丈夫です。 自分で命名できるものですから、自分がわかるものならば大丈夫です。 ただし、文字数が多くなり過ぎるとスペルミスも起こりやすくなるので「$today_year_month_day_week」は「$today_YMDW」と短縮するなど、個人で考えて使用してください。 最後に ここまで読んでいただければ、このページ冒頭の時間分けとは?で書いた if(date("G") == 7 date("i") == 30){ $response = $eb- postRandom("0730.txt"); } を「7時30分に0730.txtからランダムポスト」ではなく、「7時かつ30分の場合、0730.txtからランダムポストを行い、7時かつ30分の場合の処理を終える」が正解である、と説明したことを理解していただけたと思います。 それでは例題です、難しい構造ではないのでわかりますね? if(date("G") == 7 date("i") == 30){ $response = $eb- postRandom("0730.txt"); } else if(date("G") == 12 date("i") == 0){ if(date("w") == 0 || date("w") == 6){ $response = $eb- postRandom("1200_weekend.txt"); } else{ $response = $eb- postRandom("1200_weekday.txt"); } } else if(date("G") == 23 date("i") == 30){ $response = $eb- postRandom("2330.txt"); } else{ $response = $eb- postRandom("sonota.txt"); } if(date("n") == 1 date("j") == 1 date("G") == 0 date("i") == 0){ $response = $eb- postRandom("newyear.txt"); } 正解は、「毎日7 30に0730.txtからランダムポスト、土日の12 00に1200_weekend.txtからランダムポスト、月~金曜日の12 00に1200_weekday.txtからランダムポスト、毎日23 30に2330.txtからランダムポスト、それ以外の実行はsonota.txtからランダムポスト。1月1日0時00分にnewyear.txtからランダムポスト。」です。 日時での条件分岐はつい「月→日→時→分」という順番で条件付けしがちですが、毎日同じ時間に実行するものを日にちや曜日で変えたい場合は、先に時間を指定してから日にちや曜日で分岐させる方がスマートな構造になります。 また、先に「時」「分」のようにちょっとしたズレで数値が変わってしまうものを条件判定することで、時間ズレ対策にもなります。 是非、工夫を凝らしてあなたなりのbot.phpを書いてみて下さい。 コメント とりあえず一通りの説明を書き終えました、内容の修正等ありましたらご自由にどうぞ。その他何かあればEasyBotterBBS内の非公式wkiスレに書いていただければと思います。 -- あずき (2011-07-04 00 32 19) あずき様、更新お疲れ様でした! -- 名無しさん (2011-07-04 23 13 04) わかりやすくて目から鱗です 有難うございます -- aisk (2011-11-10 15 52 12) 名前 コメント
https://w.atwiki.jp/easybotter_wiki/pages/37.html
※wikiの編集が分からなくて、追加してほしい項目がある場合はページ下の「コメント」から誰かに頼んで下さい。 特定のアカウントに対しては、別のリプライパターンを読み込ませたい コメント 特定のアカウントに対しては、別のリプライパターンを読み込ませたい EasyBotter.php内 function makeReplyTweets($replies, $replyFile, $replyPatternFile){ if(empty($this- _replyPatternData[$replyPatternFile]) !empty($replyPatternFile)){ $this- _replyPatternData[$replyPatternFile] = $this- readPatternFile($replyPatternFile); } (略) foreach($this- _replyPatternData[$replyPatternFile] as $pattern = $res){ 1. if(empty($this- _replyPatternData[$replyPatternFile]) !empty($replyPatternFile)){ の直後に $org_repfile = $replyPatternFile;//デフォルトのファイル名を保管 を追記する。 2. foreach($this- _replyPatternData[$replyPatternFile] as $pattern = $res){ の直前に //■■特定の人には別パターン■■ $userName = (string)$reply["user"]["screen_name"]; switch(true){ case stristr($userName, "bot") //botと名のつくアカウント名に対して $replyPatternFile = "bot_pattern.php";//bot_pattern.phpを適用する $this- _replyPatternData[$replyPatternFile] = $this- readPatternFile($replyPatternFile); break; case $userName == "abcd" //abcdというアカウント名に対して case $userName == "efgh" //efghというアカウント名に対して $replyPatternFile = "xxx_pattern.php";//xxx_pattern.phpを適用する $this- _replyPatternData[$replyPatternFile] = $this- readPatternFile($replyPatternFile); break; default //それ以外 $replyPatternFile = $org_repfile;//デフォルトのパターンファイル名 } または //■■特定の人には別パターン■■ $userName = (string)$reply["user"]["screen_name"]; if(stristr($userName, "bot")){//botと名のつくアカウント名に対して $replyPatternFile = "bot_pattern.php";//bot_pattern.phpを適用する $this- _replyPatternData[$replyPatternFile] = $this- readPatternFile($replyPatternFile); }else if($userName == "abcd" || $userName == "efgh"){ $replyPatternFile = "xxx_pattern.php";//xxx_pattern.phpを適用する $this- _replyPatternData[$replyPatternFile] = $this- readPatternFile($replyPatternFile); }else{ $replyPatternFile = $org_repfile;//デフォルトのパターンファイル名 } を追記する。 コメント 作成感謝!! -- 名無しさん (2013-02-17 16 04 35) ID除外の方を書き変えたり思考錯誤していますが上手くいかず…記載があれば助かります; -- 名無しさん (2013-02-21 16 21 23) これは複数人に対して個別のパターンにできるものでしょうかね -- 名無しさん (2013-03-12 02 08 18) 特定のIDに対して特定の月日だけと絞り込むこともできるかな・・・・・・ -- 名無しさん (2013-05-30 17 29 23) 名前 コメント
https://w.atwiki.jp/easybotter_wiki/pages/28.html
※wikiの編集が分からなくて、追加してほしい項目がある場合はページ下の「コメント」から誰かに頼んで下さい。 ○月○日だけ違うファイルを読み込ませ、ランダムPOSTさせたい [#mc37f673]○月○日から△日までだけ違うファイルを読み込まる。 [#sabc59c4] ランダムPOSTで複数のファイルからランダムに発言させたい [#taae1569]人格名をフッターに追加したい場合 [#t7fb77c2] ランダムPOSTで発言を重複させない様にする [#j9bda5e7] コメント [#u24d7adf] ○月○日だけ違うファイルを読み込ませ、ランダムPOSTさせたい [#mc37f673] bot.php内 $response = $eb- postRandom("data.txt"); だと通常、data.txt内の一行をランダムにPOSTします。 これを switch(date("m.d")){ case "06.01" $postfile = "specialdata.txt"; break; default $postfile = "data.txt"; } $response = $eb- postRandom($postfile);//ランダムPOST とすることで6月1日のみspecialdata.txt内の一行をランダムPOSTします。 ○月○日から△日までだけ違うファイルを読み込まる。 [#sabc59c4] bot.php内 $response = $eb- postRandom("data.txt"); だと通常、data.txt内の一行をランダムにPOSTします。 これを switch(true){ case (date("m") == 6 date("i") 9 date("i") 16) $postfile = "specialdata.txt"; break; default $postfile = "data.txt"; } $response = $eb- postRandom($postfile);//ランダムPOST とすることで6月10日から15日の間のみspecialdata.txt内の一行をランダムPOSTします。 ランダムPOSTで複数のファイルからランダムに発言させたい [#taae1569] bot.php内 $response = $eb- postRandom("data.txt"); だと通常、data.txt内の一行をランダムにPOSTします。 これを $randfile = array("one.txt","two.txt");//ランダムPOST-ファイル名 $response = $eb- postRandom($randfile[array_rand($randfile)]);//ランダムPOST とすることでone.txtかtwo.txtをランダムに選び、更にtxt内の一行をランダムにPOSTします。 人格を分けて発言させたい場合、one.txtに1人格目・two.txtに2人格目のセリフを入れましょう。 人格名をフッターに追加したい場合 [#t7fb77c2] EasyBotter.php内 //ランダムにポスト function postRandom($datafile = "data.txt"){ (略) //idなどの変換 if(preg_match("@{.+?}@",$status) == 1){ $status = $this- convertText($status); } とある部分を探して下さい。これの直後に //■■人格名フッター追加■■ switch($datafile){ case "one.txt" $reply_pattern_name = " ▲▲▲"; $status .= $reply_pattern_name; break; case "two.txt" $reply_pattern_name = " ●●●"; $status .= $reply_pattern_name; break; } を追記する。 こうすることで例えばone.txt内の「あいうえお」と言うセリフをランダムPOSTする時、「あいうえお ▲▲▲」と言った形で発言します。 ランダムPOSTで発言を重複させない様にする [#j9bda5e7] ソースは Twitter Bot BBS http //jbbs.livedoor.jp/bbs/read.cgi/internet/6629/1259840844/5-6 EasyBotter.php内の //発言を作る function makeTweet($file, $number = FALSE){ の直前に //■■ランダムPOST・重複チェック■■ function rento_check($file){ if(empty($this- _tweetData[$file])){ $this- _tweetData[$file] = $this- readDataFile($file); } $rento_limit = 10; // n個前まで投稿を記録し、二重投稿を回避する $twit_logfile = "twit_log.txt"; //$twit_logfileは存在するか? if(!file_exists($twit_logfile)){ touch($twit_logfile) or die( ファイル作成に失敗\n ); chmod($twit_logfile, 0606) or die( 権限変更に失敗\n );//※パーミッションは鯖によって違います } $Posttweets = file_get_contents($twit_logfile); // 読み込み $p_tw = explode("\n", $Posttweets); // 配列に格納 $status = $this- _tweetData[$file][array_rand($this- _tweetData[$file])]; while(true) { if(in_array($status, $p_tw)){ //発言にあるか?無ければ抜ける //発言をランダムに一つ選ぶ $status = $this- _tweetData[$file][array_rand($this- _tweetData[$file])]; }else{ break; } //無ければ抜ける } $p_tw2[0] = $status;//投稿ログをローテート for( $i = 1; $i $rento_limit; $i++ ){ //1から$rento_limit直前まで if($p_tw[$i-1]) { $p_tw2[$i] = $p_tw[$i-1]; //古いのを送る。例:$p_tw2[1] = $p_tw[0] }else{ break; } //投稿が少ない時は抜ける } $p_tw_output = join("\n",$p_tw2); //配列結合 $fp = fopen( twit_log.txt , w ); //ファイルオープン flock($fp, LOCK_EX); // ファイルのロック(排他制御) fwrite($fp,$p_tw_output); //ファイル書き込み fclose($fp); //ファイルクローズ return $status; //違う文を戻り値として返す } を追記する。 //ランダムにポスト function postRandom($datafile = "data.txt"){ $status = $this- makeTweet($datafile); の $status = $this- makeTweet($datafile); を $status = $this- rento_check($datafile); へ変更する。 空のtwit_log.txtを作成し、アップロードする。※ログファイル用のパーミッションに。 ※なくても自動作成するように記述はしてありますが、動かない場合もありますので自分で作成してうpするのが確実 コメント [#u24d7adf] ランダムPOSTで発言を重複させない様にする を書き込みましたが。重複するエラーが出ます。また、5回連続でランダムポストを繰り返すにはどうしたらいいですか。 -- 安井一博 (2011-01-15 20 41 51) 複数ファイルから、ランダムに1行を抜き出し、ひとつの発言として結合させてポストするにはどうすれば良いのでしょうか。 -- 小林一郎 (2011-03-04 11 47 01) 日付ではなく、曜日で発言内容の変更(特定ファイルの読み込み)は可能でしょうか -- 坂井 (2011-04-13 06 10 44) ↑ 可能 -- 名無しさん (2011-04-17 18 40 38) 人格を作って、なおかつifを使って定期的に呟かせるにはどう調節すれば可能でしょうか? -- 名無し (2013-01-14 00 18 12) このページの内容は2.1版でも特に修正無しに使えますか? -- 名無しさん (2013-02-05 14 29 08) ランダム発言を重複しないようにする、はダメでした -- 名無しさん (2013-02-17 17 54 05) ↑ごめん、大嘘ついた。 ランダム発言重複回避はそのまま使えました -- 名無しさん (2013-02-17 18 05 30) ランダム重複回避は、改行が含まれてると俺の環境ではダメだった -- 名無しさん (2014-02-03 00 39 36) 名前 コメント